﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using SharpMUD.Framework.Services;
using SharpMUD.Framework.Services.Security;
using SharpMUD.Framework.Security;

namespace SharpMUD.Framework.Workflow.SessionState
{
    public interface ISessionStateContainer<T>
        : ISessionState<T>, IEnumerable<ISessionState<T>>
        where T : IUserSession
    {
        ISessionState<T> Peek();
        ISessionState<T> Pop();
        void Push(ISessionState<T> sessionState);
        void Enqueue(ISessionState<T> sessionState);

        ISessionState<T> GetActiveSessionState();
        IEnumerable<ISessionState<T>> GetPathToActiveSessionState();
        ISessionStateContainer<T> GetContainerOfActiveSessionState();
    }
}
